package com.hyper_yang.javase.collections.generics;


import java.util.ArrayList;

public class GenericsInterface {
    /*
        泛型接口的两种使用方式：
            1: 实现类给出具体的类型
            2: 实现类延续泛型，创建实现类对象时在确定类型
     */
    public static void main(String[] args) {
        // 泛型不具备继承性，但是数据具备继承性
        ArrayList<GrandFather> list1 = new ArrayList<>();
        ArrayList<Father> list2 = new ArrayList<>();
        ArrayList<Son> list3 = new ArrayList<>();

        // 泛型不具备继承性    用泛型方法可以，这个方法就不再限制于GrandFather\Father\Son 解决办法: 泛型通配符 ？ 限定方式: ? extends E:       ? super E:
//        method(list1);  √
//        method(list2);  ×
//        method(list3);  ×
        method(list1);
        method(list2);
        method(list3);

        // 数据具备继承性
        list1.add(new GrandFather());
        list1.add(new Father());
        list1.add(new Son());

    }

//    public static void method(ArrayList<GrandFather> list){
//
//    }
//    public static void method(ArrayList<? extends GrandFather> list){
//
//    }
    public static void method(ArrayList<? super Son> list){

    }

}

class GrandFather{

}
class Father extends GrandFather{

}
class Son extends Father{

}